package com.hboxs.asl.pingpp.service;

import com.pingplusplus.exception.PingppException;
import com.pingplusplus.model.Charge;

import java.util.Map;

/**
 * Service -- Ping++支付
 */
public interface PaymentService {

    /**
     * 简易支付对象
     *
     * @param orderNo  商户订单号，适配每个渠道对此参数的要求，必须在商户系统内唯一。(alipay: 1-64 位， wx: 1-32 位，bfb: 1-20 位，upacp: 8-40 位，yeepay_wap:1-50 位，jdpay_wap:1-30 位，cnp_u:8-20 位，cnp_f:8-20 位，推荐使用 8-20 位，要求数字或字母，不允许特殊字符)。
     * @param channel  支付使用的第三方支付渠道
     * @param amount   订单总金额, 单位为对应币种的最小货币单位，例如：人民币为分（如订单总金额为 1 元，此处请填 100）。
     * @param clientIp 发起支付请求终端的 IP 地址，格式为 IPV4，如: 127.0.0.1。
     * @param subject  商品的标题，该参数最长为 32 个 Unicode 字符，银联全渠道（upacp/upacp_wap）限制在 32 个字节。
     * @param body     商品的描述信息，该参数最长为 128 个 Unicode 字符，yeepay_wap 对于该参数长度限制为 100 个 Unicode 字符。
     * @param extra    特定渠道发起交易时需要的额外参数以及部分渠道支付成功返回的额外参数。
     * @param description ORDER(订单)/CHARGE(充值)。
     * @return
     */
    Charge simpleCharge(String orderNo, String channel, String amount, String clientIp, String subject, String body, Map<String, String> extra, String description) throws PingppException;

    /**
     * 标准支付对象
     *
     * @param orderNo     商户订单号，适配每个渠道对此参数的要求，必须在商户系统内唯一。(alipay: 1-64 位， wx: 1-32 位，bfb: 1-20 位，upacp: 8-40 位，yeepay_wap:1-50 位，jdpay_wap:1-30 位，cnp_u:8-20 位，cnp_f:8-20 位，推荐使用 8-20 位，要求数字或字母，不允许特殊字符)。
     * @param channel     支付使用的第三方支付渠道
     * @param amount      订单总金额, 单位为对应币种的最小货币单位，例如：人民币为分（如订单总金额为 1 元，此处请填 100）。
     * @param clientIp    发起支付请求终端的 IP 地址，格式为 IPV4，如: 127.0.0.1。
     * @param subject     商品的标题，该参数最长为 32 个 Unicode 字符，银联全渠道（upacp/upacp_wap）限制在 32 个字节。
     * @param body        商品的描述信息，该参数最长为 128 个 Unicode 字符，yeepay_wap 对于该参数长度限制为 100 个 Unicode 字符。
     * @param extra       特定渠道发起交易时需要的额外参数以及部分渠道支付成功返回的额外参数。
     * @param timeExpire  (optional)订单失效时间，用 Unix 时间戳表示。时间范围在订单创建后的 1 分钟到 15 天，默认为 1 天，创建时间以 Ping++ 服务器时间为准。 微信对该参数的有效值限制为 2 小时内；银联对该参数的有效值限制为 1 小时内。
     * @param metadata    (optional)参考 Metadata 元数据。
     * @param description (optional)订单附加说明，最多 255 个 Unicode 字符。
     * @return
     */
    Charge standardCharge(String orderNo, String channel, String amount, String clientIp, String subject, String body, Map<String, String> extra, String timeExpire, String metadata, String description) throws PingppException;

}
